//package shuimin.weixin.util;
//
//import io.netty.util.CharsetUtil;
//import org.jdom2.JDOMException;
//import pond.common.S;
//import pond.common.STREAM;
//import pond.web.EndToEndException;
//import pond.web.Request;
//import pond.web.http.HttpMethod;
//import shuimin.weixin.Config;
//import shuimin.weixin.util.aes.AesException;
//import shuimin.weixin.util.aes.WXBizMsgCrypt;
//
//import java.io.IOException;
//import java.util.*;
//
///**
// * 签名验证
// * Created by sky on 16/5/17.
// */
//public class SignVerify {
//
//    private Config config;
//
//    public SignVerify(Config config) {
//        this.config = config;
//    }
//
//    /**
//     * 微信服务器验证
//     */
//    private boolean checkSignature(Request req) {
//        //是微信发送过来的验证信息,判断验证并返回
//        String signature = req.param("signature");//微信加密签名
//        String timestamp = req.param("timestamp");// 时间戳
//        String nonce = req.param("nonce");// 随机数
//        String echostr = req.param("echostr");// 随机字符串
//        List<String> params = new ArrayList();
//        params.add(config.getToken());
//        params.add(timestamp);
//        params.add(nonce);
//        // 1. 将token、timestamp、nonce三个参数进行字典序排序
//        Collections.sort(params, String::compareTo);
//        // 2. 将三个参数字符串拼接成一个字符串进行sha1加密
//        String temp = SHA1.encode(params.get(0) + params.get(1) + params.get(2));
//        if (temp.equals(signature)) {
//            return true;
//        } else return false;
//    }
//
//    public Map<String, String> verify(Request req) throws AesException {
//        if (HttpMethod.POST.equals(HttpMethod.valueOf(req.method()))) {
//            try {
//                Map<String, String> params = XMLUtil.doXMLParse(STREAM.readFully(req.in(), CharsetUtil.UTF_8));
//                String encrypt_type = req.param("encrypt_type");
//                if ("aes".equals(encrypt_type)) { //aes加密
//                    S.echo(S.dump(params));
//                    String encryptStr = params.get("Encrypt");
//                    String msgSignature = req.param("MsgSignature");
//                    String timestamp = req.param("timestamp");
//                    String nonce = req.param("nonce");
//                    WXBizMsgCrypt crypt = new WXBizMsgCrypt(config);
//                    return XMLUtil.doXMLParse(crypt.decryptMsg(msgSignature, timestamp, nonce, encryptStr));
//                } else {
//                    return params;
//                }
//            } catch (JDOMException | IOException e) {
//                throw new EndToEndException(400,"消息解密失败");
//            }
//        } else {
//            Map<String, String> map = new HashMap<>();
//            if (checkSignature(req)) {
//                map.put("code", "1");
//            } else {
//                map.put("code", "0");
//            }
//            return map;
//        }
//    }
//}
